package org.面试题.Synchronized;

import java.util.concurrent.TimeUnit;

/**
 * 1. 在Person中加一个普通方法eat(),他没有上synchronized关键字
 *          B线程发信息 C 线程干饭 ， 谁会先执行
 *          ： 会先执行 干饭
 *          eat不受锁的影响，但会受主线程的时间影响
 * 2. 在new一个对象Person B C 线程分别执行两个同步方法 send() 和 call()
 *    两个对象两把锁，所以会按时间来执行，所以先输出打电话
 */

public class synchronizedDemo2 {
    public static void main(String[] args) {
        Person2 person2 = new Person2();
        Person2 person3 = new Person2();

       new Thread(person2::send,"A").start();
        // 空闲时间
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(person3::call,"D").start();
    }

}
class Person2{
    public  synchronized void send(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+"发消息");
    }

    public  synchronized void call(){
        System.out.println(Thread.currentThread().getName()+"打电话");
    }
    public   void eat(){
        System.out.println(Thread.currentThread().getName()+"干饭");
    }
}
